import math

class Solution:
    def escapeGhosts(self, ghosts: List[List[int]], target: List[int]) -> bool:
        def judge(x,y):
            def steps(x1,y1,x2,y2):
                return math.fabs(x1-x2)+math.fabs(y1-y2)
            for g in ghosts:
                if steps(x,y,g[0],g[1])<=math.fabs(x)+math.fabs(y):
                    return False
            return True
        
        xd=1 if target[0]>=0 else -1
        yd=1 if target[1]>=0 else -1
        if not judge(target[0],target[1]):
            return False
        def findroute(x,y):
            if x==target[0] and y==target[1] and judge(x,y):
                return True
            else:
                if math.fabs(x)>math.fabs(target[0]) or math.fabs(y)>math.fabs(target[1]) or not judge(x,y):
                    return False
                else:
                    return findroute(x+xd,y) or findroute(x,y+yd)
        return findroute(0,0)

'''
执行用时：
3232 ms
, 在所有 Python3 提交中击败了
9.09%
的用户
内存消耗：
37.5 MB
, 在所有 Python3 提交中击败了
5.68%
的用户
'''

import math

class Solution:
    def escapeGhosts(self, ghosts: List[List[int]], target: List[int]) -> bool:
        def steps(x1,y1,x2,y2):
            return math.fabs(x1-x2)+math.fabs(y1-y2)
        cmpsteps=steps(target[0],target[1],0,0)
        for g in ghosts:
            if steps(g[0],g[1],target[0],target[1])<=cmpsteps:
                return False
        return True 

'''
执行用时：
28 ms
, 在所有 Python3 提交中击败了
98.86%
的用户
内存消耗：
14.7 MB
, 在所有 Python3 提交中击败了
5.68%
的用户
'''